/**
  ******************************************************************************
  * @file    led_blink.h
  * @author  ashuai0110
  * @version V1.0
  * @date    2024-08-15
  * @brief   LED闪烁状态机
  *
  ******************************************************************************
  * @attention
  *
  * 版权声明:内容为编者(ashuai0110)原创,使用请注明出处,当然,你也可以不这样做^_^
  * 出处链接:https://gitee.com/ashuai0110/mcu_reuse_development_module.git
  *
  ******************************************************************************
  */

#ifndef __LED_BLINK_H
#define __LED_BLINK_H

#ifdef __cplusplus
extern "C" {
#endif

/* 包含头文件-----------------------------------------------------------------*/
#include "fsm_event_processor.h"

/* 宏定义---------------------------------------------------------------------*/
/* 用户定义的事件信号 */
#define LED_BLINK_SIG_UP                        (FSM_SIG_USER + 0u) /* 时间增加信号 */
#define LED_BLINK_SIG_DOWN                      (FSM_SIG_USER + 1u) /* 时间减少信号 */
#define LED_BLINK_SIG_OK                        (FSM_SIG_USER + 3u) /* 确认信号 */
#define LED_BLINK_SIG_TICK                      (FSM_SIG_USER + 4u) /* 100ms定时信号 */

/* 类型定义-------------------------------------------------------------------*/
/* LED闪烁事件结构体 */
typedef struct led_blink_event {
    fsm_event_t super;
    uint32_t tick; /* 用户参数 */
} led_blink_event_t;

/* LED闪烁状态机结构体 */
typedef struct led_blink_fsm {
    fsm_t super;
    uint16_t blinkTime; /* 用户参数 */
    uint16_t curTime;
} led_blink_fsm_t;

/* 全局变量-------------------------------------------------------------------*/

/* 函数原型-------------------------------------------------------------------*/
void led_blink_ctor(led_blink_fsm_t *_fsm);

uint8_t led_blink_initial(led_blink_fsm_t *_fsm, fsm_event_t const *event);
uint8_t led_blink_setting(led_blink_fsm_t *_fsm, fsm_event_t const *event);
uint8_t led_blink_running(led_blink_fsm_t *_fsm, fsm_event_t const *event);

#ifdef __cplusplus
}
#endif

#endif /* led_blink.h */
